package view
{
	import flash.events.Event;
	
	import model.AnneeEtude;
	import model.Utilisateur;
	import model.proxy.DroitUtilisateurProxy;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	
	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;
	
	import view.components.DroitUtilisateurPanel;
	
	public class DroitUtilisateurPanelMediator extends Mediator implements IMediator
	{
		
		public static const NAME : String = 'DroitUtilisateurPanelMediator';
		
		/** 
		 * Constructor 
		 * Listen event of the component to send notification 
		 */ 
		public function DroitUtilisateurPanelMediator(viewComponent : DroitUtilisateurPanel)
		{
			super(NAME, viewComponent); 
			viewComponent.addEventListener(DroitUtilisateurPanel.OBTENIR_LISTE_USERS, obtenirListeUsersNotification);
			viewComponent.addEventListener(DroitUtilisateurPanel.OBTENIR_LISTE_ALL_AN_ETUDE, obtenirListeAllAnEtudeNotification);
			viewComponent.addEventListener(DroitUtilisateurPanel.VALIDER_MODIF_USER, validerModifUserNotification);
		}
		
		 private function obtenirListeUsersNotification(event : Event=null):void 
		 { 
			sendNotification(DroitUtilisateurPanel.OBTENIR_LISTE_USERS, null); 
		 } 
		 
		 private function obtenirListeAllAnEtudeNotification(event : Event=null):void
		 {
		 	sendNotification(DroitUtilisateurPanel.OBTENIR_LISTE_ALL_AN_ETUDE,null);
		 }
		 
		 private function validerModifUserNotification(event : Event=null):void
		 {
		 	var user:Utilisateur = (droitUtilisateurPanel.affichage.selectedItem as Utilisateur);
		 	user.niveau = (droitUtilisateurPanel.statutUser.selectedItem.data) as Number;
		 	var collAnEtude:ArrayCollection = (droitUtilisateurPanel.an_respo.dataProvider as ArrayCollection);
		 	sendNotification(DroitUtilisateurPanel.VALIDER_MODIF_USER, [ user, collAnEtude ]);
		 }
		 
		 override public function listNotificationInterests():Array 
		 { 
		 	return [ DroitUtilisateurProxy.LISTE_USERS_OBTENUE,
		 			 DroitUtilisateurProxy.LISTE_ALL_AN_ETUDE_OBTENUE,
		 			 DroitUtilisateurProxy.USER_OBTENU ]; 
		 }
		 
		 override public function handleNotification(note : INotification):void 
	 	 { 
			 switch (note.getName()) 
			 { 
			 	case DroitUtilisateurProxy.LISTE_USERS_OBTENUE:
			 	{
			 		droitUtilisateurPanel.affichage.dataProvider = (note.getBody() as Array);
				 	break;
				}
				case DroitUtilisateurProxy.LISTE_ALL_AN_ETUDE_OBTENUE:
				{
					var ac_respo:ArrayCollection = new ArrayCollection;
			 		var a_respo:Array = new Array;
			 		var ac_toutes:ArrayCollection = new ArrayCollection;
			 		
			 		a_respo = (droitUtilisateurPanel.an_respo.dataProvider.source as Array);
			 		ac_respo = new ArrayCollection(a_respo);
			 		if (note.getBody() != null){
			 			ac_toutes = new ArrayCollection(note.getBody() as Array);
				 		if(ac_respo!=null)
				 		{	
				 			for (var j:uint = 0 ; j<ac_respo.length ; j++){
				 				for (var i:uint = 0 ; i<ac_toutes.length ; i++){
				 					if ((ac_toutes[i] as AnneeEtude).id_an_etude ==	(ac_respo[j] as AnneeEtude).id_an_etude){ 						
				 						ac_toutes.removeItemAt(i);
				 						}
								}
							}
				 			droitUtilisateurPanel.an_etude.dataProvider = ac_toutes.source;
				 		}
				 		//droitUtilisateurPanel.an_etude.dataProvider = (note.getBody() as Array);
					}
					break;
				}
				case DroitUtilisateurProxy.USER_OBTENU:
				{
					droitUtilisateurPanel.affichage.dataProvider = (note.getBody() as Array);
				 	break;
				}
			 	default:
			 	break;
		 	 } 
	 	  }
	 	  
	 	  /** 
		  * Get the loginPanel component 
		  */ 
		  private function get droitUtilisateurPanel():DroitUtilisateurPanel 
		  { 
		  	return viewComponent as DroitUtilisateurPanel; 
		  }



	}
}